package main
import (
	"fmt"
	"unicode/utf8"
)

func main(){
	
	// 本质是一个[]byte的切片
	const s = "alan是我"

	// len表示字节长度，在utf8中的汉字占3个字节
	fmt.Println("Len:",len(s))

	// 打印原始[]byte中的字节（十六进制）
	for i:=0;i<len(s);i++{
		fmt.Printf("%x ",s[i])
	}
	fmt.Println()

	// rune 实际是 int32，表示一个 Unicode 码点。
	// 简单可以理解为字符的概念
	fmt.Println("Rune count:",utf8.RuneCountInString(s))
	
	for index, rune := range s {
		// 直接打印的是utf8的编码
		// fmt.Println(index,rune)
		fmt.Printf("%#U starts at %d\n", rune, index)
	}

	// 通过偏移量来处理，没整明白
	fmt.Println("\nUsing DecodeRuneInString")
	for i,w := 0,0;i<len(s);i+=w{
		rune,width := utf8.DecodeRuneInString(s[i:])
		fmt.Printf("%#U starts at %d\n", rune, i)
		w = width

		examineRune(rune)
	}

	// 转换
	x := "你好"

	b := []byte(x) // UTF-8 字节序列
	r := []rune(x) // Unicode 码点序列

	fmt.Println(len(b)) // 6
	fmt.Println(len(r)) // 2

	fmt.Println(string(b))
	fmt.Println(string(r))


}

func examineRune(r rune) {	
	if r == 't' {
		fmt.Println("found tee")
	} else if r == 'ส' {
		fmt.Println("found so sua")
	}
}